/**
 * Promise的对象方法： catch
 *  - 当使用reject时会回调catch
 *  - 当抛出异常时也会回调catch
 *  当然同时使用只会执行一个，哪个在前执行哪个
 */

//通过catch方法捕获异常，是ES6新增的语法糖
//有限捕获的是原先的promise，如果原promise没有异常抛出，也可以捕获后续异常
const promise = new Promise((resolve, reject) => {
  resolve()
  //reject('reject msg...')
  //throw new Error('this is a error msg...')
})
promise
  .then((res) => {
    throw new Error('this is a new error')
  })
  .catch((err) => {
    console.log(err)
  })

//拒绝捕获的问题,只是单独使用then方法的fulfilled状态，不对err进行处理时，如果promise中有reject或抛出异常就会报错
// promise.then((res) => {})
// promise.catch((err) => {})

//catch方法的返回值，依然返回的是一个Promise，且调用的resolve(返回值),所以后面将会执行then方法中的回调
const promise1 = new Promise((resolve, reject) => {
  reject('promise1 error')
})
promise1
  .then((res) => {})
  .catch((err) => {
    console.log(err) //promise1 error
    return 'catch err'
  })
  .then((res) => {
    console.log('res result:' + res) //res result:catch err
  })
  .catch((err) => {
    console.log(err) //此时不会打印
  })
